#include <iostream>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/async.h>

int main()
{
    // 设置全局的刷新策略 e.g :每秒刷新
    spdlog::flush_every(std::chrono::seconds(1));
    // 遇到debug以上等级的日志立即刷新
    spdlog::flush_on(spdlog::level::level_enum::debug);
    // 设置全局的日志输出等级 --每个日至器可以独立进行设置
    spdlog::set_level(spdlog::level::level_enum::debug);

    /*
        queue_size (3072)

        异步日志队列的最大容量（消息数）。

        当日志消息写入速度超过后台线程处理能力时，日志会暂存到队列中。

        如果队列满，根据策略（默认阻塞或丢弃）处理新日志。

        此处设置为 3072，表示队列最多缓存 3072 条日志消息。

        thread_count (1)

        后台工作线程的数量。

        此处设置为 1，表示仅使用 1 个线程处理日志（适合轻量级场景）。

        对于高并发场景，可以增加线程数（需权衡性能与线程安全）。
    */

    // 初始化异步日至输出线程配置
    // inline void init_thread_pool(size_t q_size, size_t thread_count)
    spdlog::init_thread_pool(3072, 1); //

    // 创建异步日志器 (标准输出) -- 工厂接口默认创建的就是同步日志
    auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("default-logger");

    // 创建异步日志器 (选择输出到文件中)   第一个参数是 日志器的名称 第二个是生成的文件内容
    // auto logger = spdlog::basic_logger_mt("file-logger", "LOG/sync.log");

    // 设置日至输出格式
    logger->set_pattern("[%n][%H:%M:%S][%t][%-8l] %v");
    // 进行简单的日志输出
    logger->trace("你好! 小明");
    logger->debug("你好! 小明");
    logger->info("你好! 小明");
    logger->warn("你好! 小明");
    logger->error("你好! 小明");
    logger->critical("你好! 小明");
    std::cout << "日至输出演示完毕!" << std::endl;

    return 0;
}